﻿using System;
using System.Collections.Generic;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using Entidad;
using Negocio.BL;
namespace EvolSoftWeb.UserControl
{
    public partial class MenuControl : BaseControl
    {
        /// <summary>
        /// Instancia de clase que permite el acceso a los datos
        /// </summary>
        SeguridadLogic logic = new SeguridadLogic();
        OpcionLogic negocioLogic = new OpcionLogic();
             /// <summary>
        /// Codigo de la pagina
        /// </summary>
        int CodigoPagina = 0;

        /// <summary>
        /// Permite controlar el evento sobre el arbol de opciones
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void tvOpciones_SelectedNodeChanged(object sender, EventArgs e)
        {
            this.CargarContenido();
        }

        /// <summary>
        /// Inicializa el contenido de la pagina
        /// </summary>
        protected override void Inicializar()
        {
            if (Request[Constantes.RequestIdPagina] != null)
            {
                try
                {
                    int idPadre = int.Parse(Request[Constantes.RequestIdPagina].ToString());


                    if (Request[Constantes.RequestSubPagina] != null)
                    {
                        this.CodigoPagina = int.Parse(Request[Constantes.RequestSubPagina].ToString());
                    }

                    this.tvOpciones.Nodes.Clear();                  
                    this.LlenarOpciones(idPadre, null, this.tvOpciones, idPadre);                   

                    //this.tvOpciones.ExpandAll();

                }
                catch (Exception)
                {
              
                }
            }            
        }


        /// <summary>
        /// Carga en el treview, las opciones del sistema
        /// </summary>
        /// <param name="codigoPadre"></param>
        /// <param name="node"></param>
        /// <param name="tree"></param>
        public void LlenarOpciones(int? codigoPadre, TreeNode node, TreeView tree, int? valorInicial)
        {
            List<VW_OPCION> treeItemsChild = negocioLogic.ObtenerPorUsuario(Global.user, (int)codigoPadre);

            foreach (VW_OPCION hijos in treeItemsChild)
            {
                TreeNode newNode = new TreeNode(hijos.DES_NOMBRE, hijos.ID_OPCION.ToString());
                if (hijos.ID_OPCION == this.CodigoPagina) newNode.Selected = true;
                if (codigoPadre == valorInicial) tree.Nodes.Add(newNode);
                else node.ChildNodes.Add(newNode);
                this.LlenarOpciones(hijos.ID_OPCION, newNode, null, null);
            }
        }




     

        protected void CargarContenido()
        {
            if (this.tvOpciones.SelectedNode != null)
            {
                string idPagina = this.tvOpciones.SelectedValue.ToString();
                string idPadre = string.Empty;

                if (Request[Constantes.RequestIdPagina] != null)
                {
                    try
                    {
                        idPadre = Request[Constantes.RequestIdPagina].ToString();
                    }
                    catch (Exception)
                    {
                    }
                }





            T_S_OPCION entity = this.logic.ObtenerOpcion(int.Parse(idPagina));

                if (entity.IND_TIPO == Constantes.TipoReporte)
                {
                    string url = Constantes.PaginaReporte + "?" + Constantes.RequestReporte + "=" + entity.DES_URL
                        + "&" + Constantes.RequestIdPagina + "=" +
                        idPadre + "&" + Constantes.RequestSubPagina + "=" + idPagina;
                    //Server.Transfer(url);
                    Response.Redirect(url);
                }
                else
                {

                    string url = entity.DES_URL;
                    string indParametro = string.Empty;
                    if (url.Length > 0)
                        indParametro = entity.DES_URL.Substring(url.Length - 1, 1);

                    if (indParametro != "&")
                    {
                        Response.Redirect(entity.DES_URL + "?" + Constantes.RequestIdPagina + "=" +
                            idPadre + "&" + Constantes.RequestSubPagina + "=" + idPagina);

                    }
                    else
                    {
                        Response.Redirect(entity.DES_URL + Constantes.RequestIdPagina + "=" +
                               idPadre + "&" + Constantes.RequestSubPagina + "=" + idPagina);
                    }
                }

            }
        }

       
    }

    
}